# include <bits/stdc++.h>
# define N 305
# define mod 1000000007
using namespace std;
int n,m;
char s[N][N];
bool a[N][N];
long long ans=0;
long long qpow(long long x,long long y)
{
    long long ans=1;
    while(y)
    {
        if(y&1)
            ans=ans*x%mod;
        x=x*x%mod;
        y>>=1;
    }
    return ans;
}
long long f[N][5000];
int g[N];
bool hi[305];
int aaaaa[]={0,0,1,1,2,3,3,1+2+3+2,1+1+3+3+2+2+1};
long long solve()
{
    for(int i=0;i<=n;i++)
        for(int j=0;j<(1<<m);j++)
            f[i][j]=0;
    f[0][0]=1;
    for(int i=1;i<n;i++)
    {
        g[i]=0;
        for(int j=1;j<=m;j++)
            if(a[i][j]==a[i+1][j])
                g[i]+=(1<<(j-1));
    }
    for(int i=1;i<=n;i++)
        for(int S=0;S<(1<<m);S++)
            if(f[i-1][S])
            {
                int nowS=S&g[i-1],T=nowS;
                while(1)
                {
                    int O=(1<<m)-1-T,nowO=O;
                    while(1)
                    {
                        for(int j=1;j<=m;j++)
                            if(!(T>>(j-1)&1) && !(nowO>>(j-1)&1))
                                hi[j]=1;
                            else
                                hi[j]=0;
                        bool flag=1;
                        for(int j=1;j<=m;j++)
                            if(hi[j] && (!hi[j-1] || a[i][j-1]!=a[i][j]) && (!hi[j+1] || a[i][j+1]!=a[i][j]))
                            {
                                flag=0;
                                break;
                            }
                        if(flag)
                        {
                            int nowlen=0;
                            long long res=1;
                            for(int j=2;j<=m;j++)
                                if(hi[j])
                                    nowlen++;
                                else
                                    res=res*aaaaa[nowlen],nowlen=0;
                            (f[i][T+nowO]+=f[i-1][S]*res)%=mod;
                        }
                        if(!nowO)
                            break;
                        nowO=(nowO-1)&O;
                    }
                    if(!T)
                        break;
                    T=(T-1)&nowS;
                }
            }
    long long ans=0;
    for(int i=0;i<(1<<m);i++)
        ans=(ans+f[n][i])%mod;
    return ans;
}
int main()
{
    freopen("disanti.in","r",stdin);
    freopen("disanti.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        scanf("%s",s[i]+1);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            a[i][j]=(s[i][j]=='1');
    if(n==1)
    {
        for(int i=1;i<=m;i++)
        {
            a[1][i]^=1;
            int cnt=0;
            for(int j=2;j<=m;j++)
                cnt+=(a[1][j]==a[1][j-1]);
            cout<<qpow(2,cnt)<<' ';
            a[1][i]^=1;
        }
        cout<<endl;
        return 0;
    }
    if(m>n)
    {
        for(int i=1;i<=max(n,m);i++)
            for(int j=i+1;j<=max(n,m);j++)
                swap(a[i][j],a[j][i]);
        swap(n,m);
    }
    for(int i=1;i<=n;i++,cout<<endl)
        for(int j=1;j<=m;j++)
        {
            a[i][j]^=1;
            cout<<solve()<<' ';
            a[i][j]^=1;
        }
    return 0;
}